<?php
namespace App\Admin\Controllers;

use App\AdminUser;

class UserController extends Controller{
    // 管理员列表页面
    public function index(){
        $users = AdminUser::paginate(10);
        return view('admin.user.index',compact('users'));
    }
    // 管理员创建页面
    public function create(){
        return view('admin.user.add');
    }
    // 创建操作
    public function store(){
        $this->validate(request(),[
            'name' => 'required|min:2',
            'password' => 'required',
        ]);
        $name = request('name');
        $password = bcrypt(request('password'));
        AdminUser::create(compact('name','password'));
        return redirect('/admin/users');
    }
    // 用户角色页面
    public function role(\App\AdminUser $user){
        // 获取所有角色
        $roles = \App\AdminRole::all();
        // 获取当前用户下的角色
        $myRoles = $user->roles;
        return view('admin.user.role',compact('roles','myRoles','user'));
    }
    // 储存用户角色
    public function storeRole(\App\AdminUser $user){
        $this->validate(request(),[
            'roles' => 'required|array',
        ]);
        $roles = \App\AdminRole::findMany(request('roles'));//通过findmany 从传过来的roles id数组中查找
        $myRoles = $user->roles;
        // 要增加的
        $addRoles = $roles->diff($myRoles);// diff 返回roles 存在而myRoles 不存在的集合
        foreach($addRoles as $role){
            $user->assignRole($role);// 保存一个角色 在模型中定义的方法
        }
        // 要删除的
        $deleteRoles = $myRoles->diff($roles);//传过来的roles比本身myroles少 从myroles中排除roles找出要删除的
        foreach($deleteRoles as $role){
            $user->deleteRole($role);
        }
        return back();
    }
}